﻿#ifndef SERVERTHREAD_H
#define SERVERTHREAD_H
#include <QtNetwork>

class serverthread : public QTcpSocket
{
    Q_OBJECT

public:

    enum CmdType{
        HeartBeat=0,//心跳包
        Register=1,//用户登录
        NewUser=1000,//新用户
        AddNewUser=1001,//添加用户
        RemoveUser=1002,
        NewMessageReturn=2000,//发送新消息返回
        NewMessage=2001,//收到新消息
        NewMessageFile=2011,//收到新文件消息
        NewMessageFileGroup=2021,//收到新文件群消息
        NewMessageFileReturn=2010,//发送新文件消息返回
        ConfigSetReturn=2100,//用户参数设置返回
        ConfigSet=2101,//接收用户参数设置
        GetPiIP=4001,//获取文件共享服务IP
        Other,
    };
    Q_ENUM(CmdType)
    CmdType preCmd;
    explicit serverthread(QTcpSocket *parent = nullptr,QString ip="127.0.0.1",quint16 port=12300);

    bool saveToDisk(const QString &filename, const QByteArray data);
    void CloseTcp();

public slots:
   void ireadyRead();
   void ierror(QAbstractSocket::SocketError SocketError);
   void iconnected();
   void idisconnected();
   void istateChanged(QAbstractSocket::SocketState state);
   void connectTimeout();
   void heartTimeout();

   void started();
   void ConnectTcp(QString ip,quint16 port);

   void Write(const QByteArray &data);

signals:
    void MessageRev(int type,int subtype,QString str);
    void SocketStateChange(int state,QString str);
//    void UpdateFileChange(QString);

private:
    QString m_ip;
    quint16 m_port;
    QTimer *m_pConnect;
    QTimer *m_pHeart;
    QByteArray m_getData;
    int m_heartTimes;
};

#endif // SERVERTHREAD_H
